package com.power.sifa.correction.service;

import com.power.sifa.correction.model.Crc_camera;
import com.power.sifa.correction.model.Cre_record_ga;
import com.power.sifa.correction.model.pageInfo.Cre_record_gaPageInfo;
import com.power.sifa.correction.model.pojo.bo.CheckRuleRequestBO;
import com.power.sifa.correction.model.pojo.bo.CheckRuleResultBO;
import com.power.sifa.statistics.model.vo.MarkPointVO;
import com.power.sifa.statistics.model.vo.MonitoringVO;
import org.springframework.data.domain.Page;

import java.util.Date;
import java.util.List;

/**
 *  公安推送记录业务层
 */
public interface Cre_record_gaService {

    /**
     *  根据id获取公安推送记录对象
     */
    Cre_record_ga getById(Integer id);

    /**
     *  根据传入公安推送记录对象进行新增或更新操作
     */
    void saveOrUpdate(Cre_record_ga cre_record_ga);

    /**
     *  根据id删除公安推送记录
     */
    void removeById(Integer id);

    /**
     *  根据传入条件查询公安推送记录分页结果
     */
    Page<Cre_record_ga> findAll(Cre_record_gaPageInfo pageInfo);
    
    /**
     * 查询全部公安推送记录
     */
    List<Cre_record_ga> findAll();


    /**
     * 条件查询全部公安推送记录
     * @param pageInfo
     * @return
     */
    List<Cre_record_ga> findByConditon(Cre_record_gaPageInfo pageInfo);
    
     /**
     *  根据id批量删除公安推送记录
     */
    void removeByIds(List<Integer> list);
    
     /**
     *  批量保存公安推送记录
     */
    void saveAll(List<Cre_record_ga> list);


    /**
     * 公安记录查询单条对应的校验规则记录
     * @param cre_record_ga 公安记录
     * @param checkRuleRequestBOList 对应人员的总的校验请求list
     * @return
     * @throws Exception
     */
    List<CheckRuleResultBO> transSingleRuleRequest(Cre_record_ga cre_record_ga, List<CheckRuleRequestBO> checkRuleRequestBOList) throws Exception;

    /**
     * 公安记录批量查询全部的对应的校验规则记录
     * @param cre_record_gas 公安记录
     * @return
     */
    void transRuleRequests(List<Cre_record_ga> cre_record_gas) throws Exception;

    /**
     * 通过时间范围查询对应的公安数据
     * @param personIds 人员id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    List<Cre_record_ga> findRecordByPersonIdsAndTime(List<String> personIds, Date startTime, Date endTime);

    /**
     * 通过taskId查询对应的公安数据
     * @param taskId
     * @return
     */
    List<Cre_record_ga> findRecordByTaskId(String taskId);

    /**
     * 公安数据异步同步
     * @param taskId
     */
    void validateRecord(String taskId);

    /**
     * 公安数据同步
     * @param taskId
     * @throws Exception
     */
    void validateRecordAsync(String taskId) throws Exception;

    /**
     * 统计对应的摄像头近期拍摄的总数
     * @param camera
     * @return
     */
    Long countCameraShotTotal(Crc_camera camera, Cre_record_gaPageInfo pageInfo);

    /**
     * 统计拍摄到的人员的总数
     * @param camera
     * @param pageInfo
     * @return
     */
    Long countCameraPersonTotal(Crc_camera camera, Cre_record_gaPageInfo pageInfo);

    List<Cre_record_ga> recentRecordGa(String perId);

    Page<Cre_record_ga> getDayMonitor(Cre_record_gaPageInfo queryPageInfo);

    List<MarkPointVO> getActionTrack(Cre_record_gaPageInfo pageInfo);

    List<MonitoringVO> getMonitoringList(Cre_record_gaPageInfo queryPageInfo);
}
